<?php

namespace App\Miya\UIData;

use App\Miya\Models\Module;
use App\Miya\Models\SearchRecord;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\ModelNotFoundException;

class SearchRecordData extends CommonData
{
    protected $name = 'search_record';

    /**
     * 通过模块id获取热门搜索
     * @param int $num 热门搜索词数量 非必填
     * @param null $moduleId 模块id 非必填
     *
     * @operate 遍历调用
     *
     * @data id 模块id
     * @data search 搜索内容
     * @data module_id 模块id
     * @data module 模块信息
     * @data count 搜索量
     */
    public function list(int $num = 5, $moduleId = null)
    {
        return SearchRecord::orderBy('count', 'DESC')
            ->select(['id', 'search', 'module_id', 'count'])
            ->with(['module:id,name,tag'])
            ->where(function ($query) use ($moduleId) {
                if ($moduleId) {
                    $query->where('module_id', $moduleId);
                }
            })->take($num)->get();
    }


    /**
     * 通过模块id获取热门搜索
     * @param int $num 热门搜索词数量 非必填
     * @param null $moduleTag 模块Tag 非必填
     *
     * @operate 遍历调用
     *
     * @data id 模块id
     * @data search 搜索内容
     * @data module_id 模块id
     * @data module 模块信息
     * @data count 搜索量
     */
    public function listByTag(int $num = 5, $moduleTag = null)
    {
        if (!$moduleTag) {
            $moduleId = null;
        } else {
            $module = Module::where('tag', $moduleTag)->first();
            $moduleId = $module->id;
        }

        return SearchRecord::orderBy('count', 'DESC')
            ->select(['id', 'search', 'module_id', 'count'])
            ->with(['module:id,name,tag'])
            ->where(function ($query) use ($moduleId) {
                if ($moduleId) {
                    $query->where('module_id', $moduleId);
                }
            })->take($num)->get();
    }

    /**
     * 获取热门搜索词的字符串
     * @param int $num 热门搜索词数量 非必填
     * @param null $moduleId 模块id 非必填
     *
     * @operate 直接调用
     */
    public function string(int $num = 5, $moduleId = null)
    {
        return $this->list($num, $moduleId)->pluck('search')->join(',');
    }

    /**
     * 获取热门搜索词的字符串
     * @param int $num 热门搜索词数量 非必填
     * @param null $moduleTag 模块Tag 非必填
     *
     * @operate 直接调用
     */
    public function stringByTag(int $num = 5, $moduleTag = null)
    {
        return $this->listByTag($num, $moduleTag)->pluck('search')->join(',');
    }
}
